/**
 * 冒泡排序算法实现
 * @param {Array} arr - 需要排序的数组
 * @returns {Array} - 排序后的数组
 */
function bubbleSort(arr) {
  const len = arr.length;
  // 外层循环控制需要比较的轮数
  for (let i = 0; i < len - 1; i++) {
    // 内层循环控制每轮比较的次数
    for (let j = 0; j < len - 1 - i; j++) {
      // 如果前一个数大于后一个数，则交换它们的位置
      if (arr[j] > arr[j + 1]) {
        // 使用解构赋值进行交换
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }
  return arr;
}

// 测试用例
const testCases = [
  [64, 34, 25, 12, 22, 11, 90],
  [5, 2, 8, 12, 1, 3],
  [1],
  [],
  [3, 3, 2, 2, 1, 1]
];

// 运行测试
console.log('冒泡排序测试结果：');
testCases.forEach((test, index) => {
  console.log(`测试用例 ${index + 1}:`);
  console.log('原始数组:', test);
  console.log('排序后:', bubbleSort([...test]));
  console.log('-------------------');
}); 